"""
- 字典 是 无序 的对象集合
- 字典用 { } 定义
- 字典使用 键值对 存储数据，键值对之间使用 , 分隔
        键 key 是索引
        值 value 是数据
        键 和 值 之间使用 : 分隔
        键必须是唯一的
        键 只能使用 字符串、数字或 元组,值 可以取任何数据类型
"""

# 定义字典：
xiaoming = {"name": "小明", "age": 18, "gender": True}

# 1. 字典获取
# -- 获取指定key的值 : 字典[key], 字典.get(key)--
# name = xiaoming["name1"]    # 字典[key] key不存在程序报错
name = xiaoming["name"]
print(name)  # 小明
# age = xiaoming.get("age1")    # 字典[key] key不存在不报错，返回none
age = xiaoming.get("age")
print(age)  # 18

# -- 获取所有key或value列表： 字典.keys(), 字典.values(), 字典.items() --
# 获取字典所有的key列表
print(xiaoming.keys())  # dict_keys(['name', 'age', 'gender'])
# 获取字典所有的values列表
print(xiaoming.values())  # dict_values(['小明', 18, True])
# 获取字典所有的key-values列表
print(xiaoming.items())  # dict_items([('name', '小明'), ('age', 18), ('gender', True)])

# 2. 字典增加
# -- 字典[key]=value : 如果key存在修改数据，如果key不存在增加数据--
xiaoming["phone"] = 10086
print(xiaoming)  # {'name': '小明', 'age': 18, 'gender': True, 'phone': 10086}

# -- 字典[key]=value : 如果key存在修改数据，如果key不存在增加数据--
xiaoming.setdefault("name", "小红")  # 不会修改数据
xiaoming.setdefault("weight", 65)
print(xiaoming)  # {'name': '小明', 'age': 18, 'gender': True, 'phone': 10086, 'weight': 65}

# 字典1.update(字典2) ：将字典2的数据合并的字典1，若key存在则覆盖数据
dict2 = {"age": 19, "birth": 19950808}
xiaoming.update(dict2)
print(xiaoming)  # {'name': '小明', 'age': 19, 'gender': True, 'phone': 10086, 'weight': 65, 'birth': 19950808}

# 3. 字典修改
xiaoming["gender"] = False
print(xiaoming)  # {'name': '小明', 'age': 19, 'gender': False, 'phone': 10086, 'weight': 65, 'birth': 19950808}

# 4. 字典删除
# -- del 字典[key] ，删除指定键值对，key不存在会报错KeyError: 'xxx'--
del xiaoming["phone"]
print(xiaoming)  # {'name': '小明', 'age': 19, 'gender': False, 'weight': 65, 'birth': 19950808}

# -- 字典.pop(key) ，删除指定键值对，key不存在也会报错KeyError: 'xxx'--
xiaoming.pop("birth")
print(xiaoming)  # {'name': '小明', 'age': 19, 'gender': False, 'weight': 65}

# -- 字典.popitem() 随机删除一个键值对--
xiaoming.popitem()
print(xiaoming)

# -- 字典.clear() 清空字典--
xiaoming.clear()
print(xiaoming)

# 5. 遍历字典
xiaoming = {"name": "小明", "age": 18, "gender": True}
for key in xiaoming:
    print("%s:%s" % (key, xiaoming[key]), end=" ")  # name:小明 age:18 gender:True
